/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 17655
 * Date: 2024-11-04
 * Time: 22:15
 */
public class test2 {
    /*
        LeetCode 1089 复写零
        给你一个长度固定的整数数组 arr ，请你将该数组中出现的每个零都复写一遍，并将其余的元素向右平移。
        注意：请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改，不要从函数返回任何东西。
     */

    public void duplicateZeros(int[] arr) {
        int n =arr.length;
        int cur = 0;
        int dest = -1;
        // 1. 找到最后一个“复写”的数
        while(cur<n){
            if(arr[cur]!=0){
                dest++;
            }else{
                dest +=2;
            }
            if(dest>=n-1){    //倒数第一个位置就得结束了。
                break;
            }
            cur++;
        }
        // 2. 处理边界情况
        if(dest==n){
            arr[n-1]=0;
            cur--;
            dest-=2;
        }
        // 3. 从后往前进行复写
        while(cur>=0){
            if(arr[cur]!=0){
                arr[dest]=arr[cur];
                dest--;
                cur--;
            }else{
                arr[dest--]=0;
                arr[dest--]=0;
                cur--;
            }
        }
    }
}
